iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
佛心分享-SideProject30

從0開始—初階程式語言學習者的必經之路系列 第 4

DAY4 少不了的關卡!用迴圈語法增加障礙

  • 分享至 

  • xImage
  •  

DAY3生成了一個遊戲,為一個主要使用動態生成數據製作的遊戲,今天就接著加上其他不同的語句來增加遊戲的難易度吧!今天的迴圈主要增加了continue 語句,以下是語法與遊戲的介紹!

目錄:
1.continue 語句用法
2遊戲生成

  1. continue 語句用法

continue 語句在許多程式語言(如C、C++、Java、Python等)中都存在,用來控制迴圈的流程。當程式執行到 continue 語句時,會跳過該次迴圈的剩餘部分,並直接進入下一次迴圈的迭代。這在需要略過某些特定條件下的操作時非常有用。

以下為各種語言中 continue 語句的使用範例:

/Python 範例

for i in range(10):
if i % 2 == 0:
continue # 跳過偶數
print(i) # 輸出奇數

/Java 範例

for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 跳過偶數
}
System.out.println(i); // 輸出奇數
}

/C++ 範例

for (int i = 0; i < 10; i++) {
if (i % 2 == 0) {
continue; // 跳過偶數
}
std::cout << i << std::endl; // 輸出奇數
}

在以上範例中,當 i 是偶數時,continue 語句會使迴圈跳過當前的迭代,直接進入下一次迭代。因此,輸出結果只會包含奇數。

2.遊戲生成

import java.util.Random;
import java.util.Stack;

public class AdvancedMaze {
private final int width;
private final int height;
private final char[][] maze;
private final Random random = new Random();
private int score;

public AdvancedMaze(int width, int height) {
    this.width = width;
    this.height = height;
    this.maze = new char[width][height];
    this.score = 0;
    generateMaze();
}

private void generateMaze() {
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            maze[x][y] = '#'; // 用#表示牆壁
        }
    }

    Stack<int[]> stack = new Stack<>();
    int startX = random.nextInt(width);
    int startY = random.nextInt(height);
    maze[startX][startY] = ' ';

    stack.push(new int[]{startX, startY});

    while (!stack.isEmpty()) {
        int[] cell = stack.pop();
        int x = cell[0];
        int y = cell[1];

        int[][] directions = {{0, 2}, {2, 0}, {0, -2}, {-2, 0}};
        shuffleArray(directions);

        for (int[] direction : directions) {
            int newX = x + direction[0];
            int newY = y + direction[1];

            if (isInMaze(newX, newY) && maze[newX][newY] == '#') {
                maze[newX][newY] = ' ';
                maze[x + direction[0] / 2][y + direction[1] / 2] = ' ';
                stack.push(new int[]{newX, newY});
            }
        }
    }

    // 添加障礙物和得分系統(增加continue 語句)
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            if (maze[x][y] == ' ' && random.nextInt(100) < 10) {
                maze[x][y] = 'T'; // T表示陷阱,扣分
            } else if (maze[x][y] == ' ' && random.nextInt(100) < 5) {
                maze[x][y] = 'C'; // C表示寶藏,加分
            } else {
                continue; // 跳過不需要更改的部分
            }
        }
    }
}

private boolean isInMaze(int x, int y) {
    return x > 0 && x < width - 1 && y > 0 && y < height - 1;
}

private void shuffleArray(int[][] array) {
    for (int i = array.length - 1; i > 0; i--) {
        int index = random.nextInt(i + 1);
        int[] temp = array[index];
        array[index] = array[i];
        array[i] = temp;
    }
}

public void printMaze() {
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            System.out.print(maze[x][y]);
        }
        System.out.println();
    }
}

public int getScore() {
    return score;
}

public void moveCharacter(int startX, int startY) {
    int x = startX;
    int y = startY;

    while (true) {
        if (maze[x][y] == 'T') {
            score -= 10;
            System.out.println("踩到陷阱,扣10分");
        } else if (maze[x][y] == 'C') {
            score += 10;
            System.out.println("找到寶藏,加10分");
        }

        maze[x][y] = ' '; // 清除標記

        // 隨機移動到下一個位置
        int[] directions = {0, 1, 0, -1, 1, 0, -1, 0}; // 上、右、下、左
        int dirIndex = random.nextInt(4) * 2;
        x += directions[dirIndex];
        y += directions[dirIndex + 1];

        if (x < 0 || x >= width || y < 0 || y >= height || maze[x][y] == '#') {
            break; // 碰到牆壁或邊界時停止移動
        }
    }
}

public static void main(String[] args) {
    AdvancedMaze maze = new AdvancedMaze(21, 21);
    maze.printMaze();

    maze.moveCharacter(10, 10);
    System.out.println("最終得分: " + maze.getScore());
}

}

此週將設計一個完整簡單的遊戲,透過遊戲學習迴圈用法。下禮拜可以使用其他語法整理更多我們的日常所需!


上一篇
DAY3 迴圈設計遊戲
下一篇
DAY5 遊戲越來越困難!怎麼使用迴圈讓敵人越來越多?
系列文
從0開始—初階程式語言學習者的必經之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言